﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;

namespace ivvExportacao
{
    public class tipoUnidadeEmpreendimento
    {
        public double quantidadeResgistrosResid_d;
        public double quantidadeResgistrosComerc_d;

        //LISTAS PARA VINCULAR O EMPREENDIMENTO COM O TIPO DE UNIDADE DO EMPREENDIMENTO UM PARA CADA TIPO DE
        //TABELA DO BANCO DE DADOS ANTIGO NÃO SOBRECARREGANDO O SISTEMA EVITANDO O ESTOURO DE PILHA
        public List<string> codigoEmpreendimentoResid_d = new List<string>();
        public List<string> codigoEmpreendimentoComerc_d = new List<string>();

        public void load()
        {
            quantidadeResgistrosResid_d = quantidadeResgistrosPegarResid_d();
            quantidadeResgistrosComerc_d = quantidadeResgistrosPegarComerc_d();


            SqlConnection conexaoNovaCodigoSincronizar = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNovaCodigoSincronizar.Open();

            string selectNova = "select top " + quantidadeResgistrosResid_d + " * from empreendimento where exportacao = 1 order by codigoEmpreendimento";

            SqlCommand cmdNova = new SqlCommand(selectNova, conexaoNovaCodigoSincronizar);
            SqlDataReader drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                while (drNova.Read())
                {
                    codigoEmpreendimentoResid_d.Add(drNova["codigoEmpreendimento"].ToString());
                }
            }

            drNova.Close();

            selectNova = "select top " + quantidadeResgistrosComerc_d + " * from empreendimento where exportacao = 0 order by codigoEmpreendimento";

            cmdNova = new SqlCommand(selectNova, conexaoNovaCodigoSincronizar);
            drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                while (drNova.Read())
                {
                    codigoEmpreendimentoComerc_d.Add(drNova["codigoEmpreendimento"].ToString());
                }
            }

            drNova.Close();

            conexaoNovaCodigoSincronizar.Close();
        }

        public double quantidadeResgistrosPegarResid_d()
        {
            SqlConnection conexaoAntigaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
            conexaoAntigaQTD.Open();
            SqlConnection conexaoNovaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNovaQTD.Open();

            double quantNova = 0, quantAntiga = 0;

            string selectQuantAntiga = "select count(*) as quant from resid_d";

            SqlCommand cmdAntiga = new SqlCommand(selectQuantAntiga, conexaoAntigaQTD);
            SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

            if (drAntiga.HasRows)
            {
                drAntiga.Read();
                quantAntiga = Convert.ToDouble(drAntiga["quant"].ToString());
            }
            drAntiga.Close();

            string selectQuantNova = "select count(*) as quant from tipoUnidadeEmpreendimento where exportacao = 1";
            SqlCommand cmdNova = new SqlCommand(selectQuantNova, conexaoNovaQTD);
            SqlDataReader drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                drNova.Read();
                quantNova = Convert.ToDouble(drNova["quant"].ToString());
            }

            conexaoAntigaQTD.Close();
            conexaoNovaQTD.Close();

            return quantAntiga - quantNova;
        }

        public string transfeririTipoUnidadeEmpreendimentoResid_d()
        {
            //string insertTipoUnidadeEmpreendimento = "";

            try
            {
                SqlConnection conexaoAntiga = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
                conexaoAntiga.Open();
                SqlConnection conexaoNova = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNova.Open();
                SqlConnection conexaoNovaInsert = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaInsert.Open();

                string selectAntiga = "select top " + quantidadeResgistrosResid_d + " (select razao from empresa where empresa.codigo = resid_d.cod_empresa) as empresa, ";
                selectAntiga += "(select descricao from estagio_da_obra where estagio_da_obra.codigo = resid_d.cod_estag_obra) as estagio_da_obra, ";
                selectAntiga += "(select descricao from origem_de_recursos where origem_de_recursos.codigo = resid_d.cod_orig_rec) as origem_de_recursos, ";
                selectAntiga += "(select descricao from item where item.coditem = resid_d.item) as item, ";
                selectAntiga += "resid_d.* from resid_d order by ANO_MES desc ";

                SqlCommand cmdAntiga = new SqlCommand(selectAntiga, conexaoAntiga);
                SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

                int contador = 0;

                if (drAntiga.HasRows)
                {
                    while (drAntiga.Read())
                    {
                        //SELECT PARA RECUPERAR O CÓDIGO DA INCORPORADORA, CODIGOESTAGIOOBRA, CODIGOORIGEMRECURSO E DO CODIGOSITUACAOIMOVEL COM BASE NO NOME QUE É A ÚNICA CHAVE
                        //QUE PODE SER COMPARADA

                        //OBS: ESSE SELECT TRAZ APENAS UMA LINHA COM DADOS CONTENDO QUATRO CAMPOS CODIGOINCORPORADORA, CODIGOESTAGIOOBRA, CODIGOORIGEMRECURSO E CODIGOSITUACAOIMOVEL
                        string selectNova = "select top 1 (select codigoIncorporadora from incorporadora where incorporadora.razaoSocialIncorporadora = '" + drAntiga["empresa"].ToString() + "') as codigoIncorporadora, ";
                        selectNova += "(select codigoEstagioObra from estagioObra where estagioObra.descricaoEstagioObra = '" + drAntiga["estagio_da_obra"].ToString() + "') as codigoEstagioObra, ";
                        selectNova += "(select codigoOrigemRecurso from origemRecurso where origemRecurso.descricaoOrigemRecurso = '" + drAntiga["origem_de_recursos"].ToString() + "') as codigoOrigemRecurso, ";
                        selectNova += "(select codigoSituacaoImovel from situacaoImovel where situacaoImovel.descricaoSituacaoImovel = '" + drAntiga["item"].ToString() + "') as codigoSituacaoImovel  ";
                        selectNova += "from incorporadora ";

                        SqlCommand cmdNova = new SqlCommand(selectNova, conexaoNova);
                        SqlDataReader drNova = cmdNova.ExecuteReader();

                        if (drNova.HasRows)
                        {
                            drNova.Read();

                            string insertTipoUnidadeEmpreendimento = "INSERT INTO tipoUnidadeEmpreendimento (";
                            insertTipoUnidadeEmpreendimento += "areaPrivativaTipoUnidadeEmpreendimento ,numeroQuartosTipoUnidadeEmpreendimento ";
                            insertTipoUnidadeEmpreendimento += ",numeroElevadoresTipoUnidadeEmpreendimento ,codigoEstagioObra ,codigoIncorporadora ";
                            insertTipoUnidadeEmpreendimento += ", tipoTransporte, exportacao, codigoOrigemRecurso ";
                            insertTipoUnidadeEmpreendimento += ",numeroGarangensTipoUnidadeEmpreendimento ,tempoFinanciamentoTipoUnidadeEmpreendimento ";
                            insertTipoUnidadeEmpreendimento += ",valorMedioMetroQuadradoTipoUnidadeEmpreendimento, codigoSituacaoImovel, codigoEmpreendimento)";
                            insertTipoUnidadeEmpreendimento += "VALUES ('" + drAntiga["area"].ToString() + "', '" + drAntiga["qta_quartos"].ToString() + "', ";
                            insertTipoUnidadeEmpreendimento += "'" + drAntiga["qtd_elevadores"].ToString() + "', " + drNova["codigoEstagioObra"].ToString() + ", ";
                            insertTipoUnidadeEmpreendimento += "" + drNova["codigoIncorporadora"].ToString() + ", 1, 1, ";
                            insertTipoUnidadeEmpreendimento += "" + drNova["codigoOrigemRecurso"].ToString() + ", '" + drAntiga["qtd_vagas_garagem"].ToString() + "', ";
                            insertTipoUnidadeEmpreendimento += "'" + drAntiga["temp_financ"].ToString() + "', '" + drAntiga["valor_m2"].ToString() + "', ";
                            insertTipoUnidadeEmpreendimento += "" + drNova["codigoSituacaoImovel"].ToString() + ", " + codigoEmpreendimentoResid_d[contador] + ") ";

                            SqlCommand cmdInsertTipoUnidadeEmpreendimento = new SqlCommand(insertTipoUnidadeEmpreendimento, conexaoNovaInsert);
                            cmdInsertTipoUnidadeEmpreendimento.ExecuteNonQuery();

                            contador++;
                        }

                        drNova.Close();
                    }
                }

                drAntiga.Close();

                conexaoAntiga.Close();
                conexaoNova.Close();
                conexaoNovaInsert.Close();

                return "<span style=\"color:Green\">" + quantidadeResgistrosResid_d + " registros dos tipos de unidade dos empreendimentos da tabela resid_d transferidos com sucesso.</span>";
            }
            catch
            {
                //return "<span style=\"color:Red\">Falha ao transferir os dados dos tipos de unidade dos empreendimentos da tabela resid_d.\n\n\n\n" + insertTipoUnidadeEmpreendimento + "</span>";
                return "<span style=\"color:Red\">Falha ao transferir os dados dos tipos de unidade dos empreendimentos da tabela resid_d.</span>";
            }
        }

        public double quantidadeResgistrosPegarComerc_d()
        {
            SqlConnection conexaoAntigaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
            conexaoAntigaQTD.Open();
            SqlConnection conexaoNovaQTD = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
            conexaoNovaQTD.Open();

            double quantNova = 0, quantAntiga = 0;

            string selectQuantAntiga = "select count(*) as quant from Comerc_d";

            SqlCommand cmdAntiga = new SqlCommand(selectQuantAntiga, conexaoAntigaQTD);
            SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

            if (drAntiga.HasRows)
            {
                drAntiga.Read();
                quantAntiga = Convert.ToDouble(drAntiga["quant"].ToString());
            }
            drAntiga.Close();

            string selectQuantNova = "select count(*) as quant from tipoUnidadeEmpreendimento where exportacao = 0";
            SqlCommand cmdNova = new SqlCommand(selectQuantNova, conexaoNovaQTD);
            SqlDataReader drNova = cmdNova.ExecuteReader();

            if (drNova.HasRows)
            {
                drNova.Read();
                quantNova = Convert.ToDouble(drNova["quant"].ToString());
            }

            conexaoAntigaQTD.Close();
            conexaoNovaQTD.Close();

            return quantAntiga - quantNova;
        }

        public string transfeririTipoUnidadeEmpreendimentoComerc_d()
        {
            try
            {
                SqlConnection conexaoAntiga = new SqlConnection(ConfigurationManager.AppSettings["baseDadosAntiga"]);
                conexaoAntiga.Open();
                SqlConnection conexaoNova = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNova.Open();
                SqlConnection conexaoNovaInsert = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaInsert.Open();

                string selectAntiga = "select top " + quantidadeResgistrosComerc_d + " (select razao from empresa where empresa.codigo = Comerc_d.cod_empresa) as empresa, ";
                selectAntiga += "(select descricao from item where item.coditem = Comerc_d.item) as item, ";
                selectAntiga += "Comerc_d.* from Comerc_d order by ANO_MES desc ";

                SqlCommand cmdAntiga = new SqlCommand(selectAntiga, conexaoAntiga);
                SqlDataReader drAntiga = cmdAntiga.ExecuteReader();

                int contador = 0;

                if (drAntiga.HasRows)
                {
                    while (drAntiga.Read())
                    {
                        //SELECT PARA RECUPERAR O CÓDIGO DA INCORPORADORA E DO CODIGOSITUACAOIMOVEL COM BASE NO NOME QUE É A ÚNICA CHAVE
                        //QUE PODE SER COMPARADA

                        //OBS: ESSE SELECT TRAZ APENAS UMA LINHA COM DADOS CONTENDO DOIS CAMPOS CODIGOINCORPORADORA E CODIGOSITUACAOIMOVEL
                        string selectNova = "select top 1 (select codigoIncorporadora from incorporadora where incorporadora.razaoSocialIncorporadora = '" + drAntiga["empresa"].ToString() + "') as codigoIncorporadora, ";
                        selectNova += "(select codigoSituacaoImovel from situacaoImovel where situacaoImovel.descricaoSituacaoImovel = '" + drAntiga["item"].ToString() + "') as codigoSituacaoImovel  ";
                        selectNova += "from incorporadora ";

                        SqlCommand cmdNova = new SqlCommand(selectNova, conexaoNova);
                        SqlDataReader drNova = cmdNova.ExecuteReader();

                        if (drNova.HasRows)
                        {
                            drNova.Read();

                            string insertTipoUnidadeEmpreendimento = "INSERT INTO tipoUnidadeEmpreendimento (areaPrivativaTipoUnidadeEmpreendimento, tipoTransporte, exportacao, codigoSituacaoImovel, codigoEmpreendimento) ";
                            insertTipoUnidadeEmpreendimento += "VALUES ('" + drAntiga["area"].ToString() + "', 0, 0, " + drNova["codigoSituacaoImovel"].ToString() + ", " + codigoEmpreendimentoComerc_d[contador] + ") ";

                            SqlCommand cmdInsertTipoUnidadeEmpreendimento = new SqlCommand(insertTipoUnidadeEmpreendimento, conexaoNovaInsert);
                            cmdInsertTipoUnidadeEmpreendimento.ExecuteNonQuery();

                            contador++;
                        }

                        drNova.Close();
                    }
                }

                drAntiga.Close();

                conexaoAntiga.Close();
                conexaoNova.Close();
                conexaoNovaInsert.Close();

                return "<span style=\"color:Green\">" + quantidadeResgistrosComerc_d + " registros dos tipos de unidade dos empreendimentos da tabela comerc_d transferidos com sucesso.</span>";
            }
            catch
            {
                return "<span style=\"color:Red\">Falha ao transferir os dados dos tipos de unidade dos empreendimentos da tabela comerc_d.</span>";
            }
        }
    }
}
